package javacroft.business;

import java.util.Iterator;
import java.util.List;

/**
 * Semestre
 * @author hind
 */
public class Semestre
{

    private List<UE> lesUE;
    private int unNumero;
    private String codeApogee = "undefined";

    /**
     * Constructeur
     * @param unNum Numéro de semestre
     * @param code Code Apogée
     */
    public Semestre(int unNum, String code)
    {
        this.unNumero = unNum;
        this.codeApogee = code;
    }

    /**
     * Constructeur
     * @param unNum Numéro de semestre
     * @param mesUE Liste des UE du semestre
     */
    public Semestre(int unNum, List<UE> mesUE)
    {
        this.unNumero = unNum;
        this.lesUE = mesUE;
    }

    /**
     * Liste des UE du semestre
     * @return Liste des UE
     */
    public List<UE> getLesUE()
    {
        return this.lesUE;
    }

    /**
     * Numéro de semestre
     * @return Numéro de semestre
     */
    public int getNumero()
    {
        return this.unNumero;
    }

    /**
     * Modifie la liste d'UE
     * @param ue Liste d'UE
     */
    public void setLesUE(List<UE> ue)
    {
        this.lesUE = ue;
    }

    /**
     *  Modifie le numéro de semestre
     * @param n Numéro de semestre
     */
    public void setNumero(int n)
    {
        this.unNumero = n;
    }

    @Override
    public String toString()
    {
        return "" + this.getNumero();
    }

    /**
     * Compare à un autre semestre
     * @param unSemestre Semestre à comparer
     * @return Comparaison
     */
    public int compareTo(Semestre unSemestre)
    {
        if (this.unNumero == unSemestre.getNumero())
        {
            return 0;
        }
        else if (this.unNumero > unSemestre.getNumero())
        {
            return 1;
        }
        else
        {
            return -1;
        }
    }

    /**
     * Compare avec un code semestre
     * @param codeSemestre Code apogée du semestre à comparer
     * @return Comparaison
     */
    public boolean compareTo(String codeSemestre)
    {
        return codeApogee.equalsIgnoreCase(codeSemestre);
    }

    /**
     * CodeApogee du semstre
     * @return codeApogee
     */
    public String getCodeApogee()
    {
        return codeApogee;
    }

    /**
     * Modifie le code apogée
     * @param codeApogee Le nouveau code apogée
     */
    public void setCodeApogee(String codeApogee)
    {
        this.codeApogee = codeApogee;
    }

    /**
     * UE correspondant à un nom d'UE
     * @param unNomUE Nom de l'UE
     * @return L'UE correspondante au nom
     */
    public UE getUE(String unNomUE)
    {
        Iterator iter = lesUE.iterator();
        UE ueCourante = null;

        while (iter.hasNext() && !((ueCourante = (UE) iter.next()).compareTo(unNomUE)))
        {
            continue;
        }

        return ueCourante;
    }

    /**
     * Ajoute une UE dans la liste
     * @param ue UE à rajouter
     */
    public void ajouterUE(UE ue)
    {
        lesUE.add(ue);
    }
}
